Hooks
都是一個一個 function,在生命週期中有些時刻發生了,就會去執行對應的 Hooks function
!
created hook
會初始化所有狀態和事件,所以在beforeCreate
中無法取得任何元件的內容。不論是 data 或是 methods 都無法取得!
ex:
export default {
data() {
return {
val: 'hello'
}
},
beforeCreate() {
console.log('Value of val is: ' + this.val) // undefined!!!
}
}
使用場景例如:執行一些不需用到實體 data 屬性的邏輯或是 API。
接著進入 created()
.....屬性都綁定好了,但還沒掛載到 DOM
上。
// 使用和上面一樣的例子
export default {
data() {
return {
val: 'hello'
}
},
created() {
console.log('Value of val is: ' + this.val) // 印出 Value of val is: hello
}
}
使用場景例如: 打完某隻 API 後需要儲存資料,就可在
created()
中讀取/賦值給 data。
進到 Vue 3
使用 Composition API
,beforeCreate
和 created
都改使用 setup()
,代表原本寫在beforeCreate
和 created
的內容都改放在 setup
中!
ex:
import { ref } from 'vue'
export default {
setup() {
const val = ref('hello')
console.log('Value of val is: ' + val.value)
return {
val
}
}
}
mounting hooks
處理元件的掛載和渲染,最最最最常見使用的 hooks
!
beforeMount()
和 onBeforeMount()
元件尚未渲染以及掛載,此時根元素也還不存在。
mounted()
和 onMounted()
在元件第一次渲染之後會被呼叫的 hooks,此時元素已經可以直接從 DOM 取得。
ex:
// Composition API 使用 refs 取得 DOM
import { ref, onMounted } from 'vue'
export default {
setup() { /* Composition API */
const root = ref(null)
onMounted(() => {
console.log(root.value)
})
return {
root
}
},
mounted() { /* Options API */
console.log(this.$el)
}
}
當狀態被修改時,會觸發再次渲染
beforeUpdate()
和 onBeforeUpdate()
當資料改變,元件被重新渲染前! 在畫面改變前,適合在此處去手動更新 DOM,例如移除事件監聽
也可以用在追蹤元件是否被編輯或是追蹤事件去取消動作(例如:回復功能 undo)
updated()
和 onUpdated()
當 DOM 更新後會去呼叫 updated
ex:
import { ref, onBeforeUpdate, onUpdated } from 'vue'
export default {
setup () {
const count = ref(0)
const val = ref(0)
onBeforeUpdate(() => {
count.value++;
console.log("beforeUpdate");
})
onUpdated(() => {
console.log("updated() val: " + val.value)
})
return {
count, val
}
}
}
大部分時候,比較多會使用 watchers
去偵測資料是否改變,因為watchers
會提供資料更改前後的值。
生命週期未完待續.....
每日一句:
每天的文章都在比短.....